﻿
// 2023/8/24: 首个版本
// 2023/8/25: bitrate默认为0
// 2023/8/25: 修正maxBFrames
// 2023/8/25: 支持AMF
// 2024/6/12: 支持spadas9
// 2024/11/11: 支持mjpeg编码(qsv)
// 2024/11/11: 支持VAAPI编码器
// 2024/12/6: 修正h264_nvenc maxBFrames设置
// 2025/5/19: 使用utility::getSharedObject
// 2025/7/16: 定义SPADAS_ENABLE_MACROS
// 2025/11/4: 析构时调用close

#ifndef GPU_ENCODER_H_
#define GPU_ENCODER_H_

#include "ffmpegdl.h"
#include "NextCompatibleImage.h"

namespace videonext
{
	using namespace spadas;

	class GPUEncoder : public Object<class GPUEncoderVars>
	{
	public:
		GPUEncoder();
		Bool open(Enum<VideoDataCodec> codec, AVHWDeviceType type, Size2D size, UInt bitRate = 0);
		void close();
		// input: AVFrameNV12
		Bool send(CompatibleImage image, Double time);
		void flush();
		Bool receive(Binary& packetData, Double& time);
	};
}

#endif
